﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Noris.Tools.TraceVisualiser.TraceData;
using Noris.Tools.TraceVisualiser.Support;
using Noris.Tools.TraceVisualiser.Components;

namespace Noris.Tools.TraceVisualiser.Forms
{
	internal partial class SettingsForm : DForm
	{
		public SettingsForm()
		{
			InitializeComponent();
			this._OkStornoPanel.OkClick += new EventHandler(OkStornoPanel_OkClick);
            this.ValuesToVisual();
		}
		void OkStornoPanel_OkClick(object sender, EventArgs e)
		{
			this.ValuesToData(true);
			this.Close();
		}
		/// <summary>
		/// Událost po potvrzení dat v okně konfigurace
		/// </summary>
		public event EventHandler SettingsChanged;
		/// <summary>
		/// Vyvolá event SettingsChanged
		/// </summary>
		protected virtual void OnSettingsChanged()
		{
			if (this.SettingsChanged != null)
				this.SettingsChanged(this, EventArgs.Empty);
		}
	    #region Persistence hodnot
        /// <summary>
        /// Hodnoty z paměti uloží do vizuálních dat formuláře
        /// </summary>
        protected void ValuesToVisual()
        {
            this.AppConfig = Steward.AppConfig.Clone;
            this._ConfigPanel.AppConfig = this.AppConfig;

            TraceColors traceColors = (TraceColors)Steward.GetFromCache(typeof(TraceColors));  // Reference na živý unikátní objekt TraceColors
			this.ColorList = traceColors.ColorListClone;                                       // TraceColors vydá svoje data (klon) do editoru
            this._ColorListPanel.ColorList = this.ColorList;                                   // Klon vložíme do editačního panelu, který se na něj napojí
        }
        /// <summary>
        /// Hodnoty z vizuální vrstvy uloží do datových objektů a vyvolá event o změně dat.
        /// </summary>
		protected void ValuesToData(bool persist)
		{
            this.AppConfig = this._ConfigPanel.AppConfig;                                      // Provede se kompletace dat z vizuální vrstvy (ConfigPanel) do klonu objektu AppConfig
            Steward.AppConfig.Clone = this.AppConfig;                                          // Hodnoty z klonu objektu AppConfig se uloží do živého configu

            this.ColorList = this._ColorListPanel.ColorList;                                   // Zde dojde k přepisu hodnot z vizuální vrstvy (_ColorListPanel) do datové vrstvy, kterou vložíme do this.ColorList
            TraceColors traceColors = (TraceColors)Steward.GetFromCache(typeof(TraceColors));  // Reference na živý unikátní objekt TraceColors
			traceColors.ColorListClone = this.ColorList;                                       // TraceColors do sebe načte editovaná data
            if (persist)
            {   // Uložíme datové objekty do výchozích souborů:
                Steward.AppConfig.Save();
                traceColors.ColorList.PresetSaveConfig();
            }
			this.OnSettingsChanged();
		}
		/// <summary>
		/// Obsahuje izolovaný klon objektu ColorList, vyzvednutý z cache objektu TraceColors.
		/// Na začátku editace se vyzvedne, uloží sem a zviditelní v this._ColorListGrid.
		/// V průběhu editace se tento objekt edituje.
		/// Po ukončení editace (OK) se tento objekt vloží nazpět do cache objektu TraceColors.
		/// </summary>
		private ColorList ColorList;
        /// <summary>
        /// Obsahuje izolovaný klon objektu Config.
        /// </summary>
        private Config AppConfig;
        #endregion
    }
}
